Virtualization allows multiplexing of an underlying host machine between different virtual machines. The host computer allocates a certain amount of its resources to each of the virtual machines. Each virtual machine is then able to use the allocated resources to execute applications, including operating systems (referred to as guest operating systems). The software layer providing the virtualization is commonly referred to as a hypervisor and is also known as a virtual machine monitor (VMM), a kernel-based hypervisor, or a host operating system. The hypervisor emulates the underlying hardware of the host computer, making the use of the virtual machine transparent to the guest operating system and the user of the computer.
A virtual machine system generally includes multiple backend devices. A backend device is a communication end point with which guest software on a virtual machine interacts. Examples of a backend device include network interface cards (NICs), disks, graphics cards, sound cards, video cards, modems, bridges, etc.
A virtual machine system can include more than one of the same kinds of a backend device. For example, a virtual machine system can include multiple NIC cards that have different features (e.g., different power consumption, speed, costs, number of concurrent users allowed). One of the NIC cards allows the guest to change its media access control (MAC) address and the others do not. During operation, the guest may need to change its MAC address but the NIC card it is currently using does not allow MAC address change. One current approach is to rely on a system administrator to command the hypervisor to initiate backend device switching for the guest. For example, a system administrator can hotplug remove a currently-installed backend device and hotplug add a new backend device. However, relying on a system administrator to detect the guest's needs and to issue appropriate commands can be cumbersome and inefficient. Further, hotplug operations are not transparent to the guest.